<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [
<!ENTITY nbsp "&#160;">
]>
<xsl:stylesheet 
	version="1.0" 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xhtml="http://www.w3.org/1999/xhtml"
	xmlns:svg="http://www.w3.org/2000/svg"
>
	<xsl:output method="xml" indent="yes"/>

	<xsl:template match="svg:svg">
		<xsl:element name="board">
			<xsl:call-template name="w_and_h_attributes"/>
			<xsl:call-template name="default_gravity"/>
			<xsl:apply-templates/>
		</xsl:element>
	</xsl:template>

	<xsl:template match="svg:rect">
		<xsl:variable name="transform" select="@transform"/>
		<xsl:element name="floor">
			<xsl:choose> 
				<xsl:when test="$transform='matrix(0,1,-1,0,0,0)'">
					<xsl:variable name="a" select="'0'"/>
					<xsl:variable name="b" select="'1'"/>
					<xsl:variable name="c" select="'-1'"/>
					<xsl:variable name="d" select="'0'"/>
					<xsl:variable name="e" select="'0'"/>
					<xsl:variable name="f" select="'0'"/>
					<xsl:variable name="x" select="@x"/>
					<xsl:variable name="y" select="@y"/>
					<xsl:variable name="w" select="@width"/>
					<xsl:variable name="h" select="@height"/>
					<xsl:attribute name="x">
						<xsl:value-of select="$x * $a + $y * $c + $e"/>
					</xsl:attribute>
					<xsl:attribute name="y">
						<xsl:value-of select="$x * $b + $y * $d + $f"/>
					</xsl:attribute>
					<xsl:attribute name="w">
						<xsl:value-of select="$w * $a + $h * $c + $e"/>
					</xsl:attribute>
					<xsl:attribute name="h">
						<xsl:value-of select="$w * $b + $h * $d + $f"/>
					</xsl:attribute>
				</xsl:when>
				<xsl:when test="string-length( $transform ) = 0">
					<xsl:call-template name="x_and_y_attributes"/>
					<xsl:call-template name="w_and_h_attributes"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:call-template name="x_and_y_attributes"/>
					<xsl:comment>
						<xsl:text>unknown transform "</xsl:text>
						<xsl:value-of select="$transform"/>
						<xsl:text>"</xsl:text>
					</xsl:comment>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:element>
	</xsl:template>

	<xsl:template match="svg:tspan">
		<xsl:variable name="type" select="text()"/>
		<xsl:choose> 
			<xsl:when test="$type='start'">
				<xsl:call-template name="bob"/>
			</xsl:when>
			<xsl:when test="$type='bob'">
				<xsl:call-template name="bob"/>
			</xsl:when>
			<xsl:when test="$type='end'">
				<xsl:call-template name="goal"/>
			</xsl:when>
			<xsl:when test="$type='goal'">
				<xsl:call-template name="goal"/>
			</xsl:when>
		</xsl:choose>
	</xsl:template>

	<xsl:template match="svg:path">
		<xsl:call-template name="path">
			<!-- assuming this is gunna be: "M ... (L ...)* z" -->
			<xsl:with-param name="feh" select="
			replace(
				replace( 
					replace( 
						replace( @d, '[,LMz]', ' ' )
						, '  *'
						, ' '
					)
					, '^ +'
					, ''
				)
				, ' +$'
				, ''
			)
			"/>
		</xsl:call-template>
	</xsl:template>

	<!-- named templates -->

	<xsl:template name="path">
		<xsl:param name="feh"/>

		<xsl:value-of select="$feh"/>

		<!-- http://www.xml.com/pub/a/2003/05/07/tr.html -->
		<xsl:variable name="tokenizedSample" select="tokenize( $feh,' ')"/>


		<!-- http://www.dpawson.co.uk/xsl/sect2/N4486.html 
			<xsl:for-each select=".|following-sibling::tokenizedSample[position() <2]">
			</xsl:for-each>
		-->
		<xsl:for-each select="$tokenizedSample[position() mod 2 = 1]">
x=<xsl:value-of select="."/> y=<xsl:value-of select="$tokenizedSample[position()+1]"/>

		</xsl:for-each>

		<xsl:for-each select="$tokenizedSample">

			<xsl:choose>
				<xsl:when test="(position() mod 2) = 1">
					<xsl:text>&lt;point x="</xsl:text><xsl:value-of select="."/><xsl:text>"</xsl:text>
				</xsl:when>
				<xsl:otherwise>
					<xsl:text> y="</xsl:text><xsl:value-of select="."/><xsl:text>"/&gt;
					</xsl:text>
				</xsl:otherwise>
			</xsl:choose>

		</xsl:for-each>
	</xsl:template>

	<xsl:template name="goal">
		<xsl:element name="goal">
			<xsl:call-template name="x_and_y_attributes"/>
		</xsl:element>
	</xsl:template>

	<xsl:template name="bob">
		<xsl:element name="bob">
			<xsl:call-template name="x_and_y_attributes"/>
		</xsl:element>
	</xsl:template>

	<xsl:template name="w_and_h_attributes">
		<xsl:attribute name="w"><xsl:value-of select="@width"/></xsl:attribute>
		<xsl:attribute name="h"><xsl:value-of select="@height"/></xsl:attribute>
	</xsl:template>

	<xsl:template name="x_and_y_attributes">
		<xsl:attribute name="x"><xsl:value-of select="@x"/></xsl:attribute>
		<xsl:attribute name="y"><xsl:value-of select="@y"/></xsl:attribute>
	</xsl:template>

	<xsl:template name="default_gravity">
		<xsl:element name="gravity">
			<xsl:attribute name="x">0.0</xsl:attribute>
			<xsl:attribute name="y">0.9</xsl:attribute>
		</xsl:element>
	</xsl:template>

	<!-- stuff to ignore: -->
	<xsl:template match="svg:metadata"></xsl:template>

</xsl:stylesheet>
